#pragma once
#include <ntifs.h>


NTSTATUS IrpCreate(_In_ struct _DEVICE_OBJECT *DeviceObject, _Inout_ struct _IRP *Irp);
NTSTATUS IrpClean(_In_ struct _DEVICE_OBJECT *DeviceObject, _Inout_ struct _IRP *Irp);
NTSTATUS IrpRead(_In_ struct _DEVICE_OBJECT *DeviceObject, _Inout_ struct _IRP *Irp);
NTSTATUS IrpWrite(_In_ struct _DEVICE_OBJECT *DeviceObject, _Inout_ struct _IRP *Irp);
NTSTATUS IrpClose(_In_ struct _DEVICE_OBJECT *DeviceObject, _Inout_ struct _IRP *Irp);
NTSTATUS ControlThroughDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp);

bool CreateDev(PDRIVER_OBJECT pDriver);
void RemoveDev(PDRIVER_OBJECT pDriver);

VOID Unload(_In_ struct _DRIVER_OBJECT *DriverObject);




#define DEVNAME L"\\Device\\MyFuckDev"
#define SYSNAME L"\\??\\MyFuckDev"

#define CTL_SYS \
    CTL_CODE(FILE_DEVICE_UNKNOWN,0x830,METHOD_BUFFERED,FILE_ANY_ACCESS)
